package com.btpj.blog_server.mapper;

import com.btpj.blog_server.entity.Article;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ArticleMapper {

    /**
     * 获取用户下指定类型的文章列表
     *
     * @param state    指定类型
     * @param userId   用户Id
     * @param keywords 搜索匹配关键字
     * @param start    列表开始索引
     * @param count    列表请求数量
     * @return 文章列表
     */
    List<Article> getArticlesByState(@Param("state") Integer state, @Param("userId") Long userId,
                                     @Param("keywords") String keywords, @Param("start") Integer start, @Param("count") Integer count);

    /**
     * 获取用户下指定类型的文章列表数量
     *
     * @param state    指定类型
     * @param userId   用户Id
     * @param keywords 搜索匹配关键字
     * @return 文章列表数量
     */
    int getArticleCountByState(@Param("state") Integer state, @Param("userId") Long userId, @Param("keywords") String keywords);

    Article getArticleById(@Param("id") Long id);

    /**
     * 删除指定ID的文章，多个
     *
     * @param articleIds 要删除的ID集合
     * @return 删除的指定ID的文章
     */
    int deleteArticlesById(@Param("articleIds") Long[] articleIds);

    /**
     * 更改指定ID文章的状态
     *
     * @param articleIds 要更改状态的文章的ID集合
     * @return 要更改状态的指定ID的文章
     */
    int updateArticlesStatesById(@Param("articleIds") Long[] articleIds, Integer state);

    /**
     * 更新文章阅读次数
     *
     * @param articleId 文章ID
     * @return 更新文章阅读次数影响的行数
     */
    int updateArticleViewCount(@Param("articleId") Long articleId);

    int addArticle(Article article);

    /**
     * 更改指定ID的文章
     *
     * @param article 要更改状态的文章
     * @return 要更改状态的指定ID的文章
     */
    int updateArticle(Article article);
}
